/**********************************************************************************************/
// dgt_Circuit.h
//
// Common Lib for Digital Studio
// Class, which represent generated circuit
//
// Copyright Diamant Group 2008
/**********************************************************************************************/
#ifndef _DGT_CIRCUIT_H_
#define _DGT_CIRCUIT_H_

#include "dgtKernel.h"
#include "dgt_SmartMacros.h"
#include "dgt_CircuitLink.h"
#include "dgt_CircuitContact.h"
#include "dgt_CircuitElement.h"
#include "dgt_BoolFunction.h"

/**********************************************************************************************/
SMART_CLASS( dgt_Circuit );

/**********************************************************************************************/
class dgt_Circuit
{
		
	public://///////////////////////////////////////////////////////////////////////////////////

							dgt_Circuit( void ) {};

							~dgt_Circuit( void ) {};

							dgt_Circuit( dgt_CrcContactArray	m_Inputs,
										dgt_CrcContactArray		m_Outputs,
										dgt_CrcElementArray		m_Elements,
										dgt_CrcLinkArray		m_Links );

							dgt_Circuit( dgt_BoolFunction_Ptr	inFunction );
							
	public://///////////////////////////////////////////////////////////////////////////////////

		dgt_CircuitElement_Ptr	get_Element( unsigned inNum );

		dgt_CrcElementArray		get_Elements( void );

		void					add_Element( dgt_CircuitElement_Ptr inElement );

		void					set_Elements( dgt_CrcElementArray inElements );

	public://///////////////////////////////////////////////////////////////////////////////////
		
		dgt_CircuitLink_Ptr		get_Link( unsigned inNum );

		dgt_CrcLinkArray		get_Links( void );

		void					add_Link( dgt_CircuitLink_Ptr inLink );

		void					set_Links( dgt_CrcLinkArray inLinks );

	public://///////////////////////////////////////////////////////////////////////////////////

		unsigned				get_InputCount( void );

		dgt_CrcContactArray		get_Inputs( void );

		void					add_Input( dgt_CircuitContact_Ptr inInput);

		dgt_CircuitContact_Ptr	get_Input( unsigned inNum );
		
		void					set_Inputs( dgt_CrcContactArray inInputs );

	public://///////////////////////////////////////////////////////////////////////////////////

		unsigned				get_OutputCount( void );

		dgt_CrcContactArray		get_Outputs( void );

		void					add_Output( dgt_CircuitContact_Ptr inOutput);

		dgt_CircuitContact_Ptr	get_Output( unsigned inNum );
		
		void					set_Outputs( dgt_CrcContactArray inOutputs );

	public:////////////////////////////////////////////////////////////////////////////////////

		dgt_CrcContactArray		m_Inputs;

		dgt_CrcContactArray		m_Outputs;

		dgt_CrcElementArray		m_Elements;
	
		dgt_CrcLinkArray		m_Links;
};


#endif // _DGT_CIRCUIT_H_